package com.hmy.finance.service.statement;

import com.hmy.ccp.common.response.BasePageResponse;
import com.hmy.finance.api.bo.core.request.FinancialContractUpdateApiRequest;
import com.hmy.finance.bo.request.*;
import com.hmy.finance.bo.response.*;

import java.util.List;

/**
 * @author songkf
 * @description 针对表【reconciliation_statement(对账单)】的数据库操作Service
 * @createDate 2024-02-21 18:55:01
 */
public interface IReconciliationStatementService {

    /**
     * 往期账单查询list接口,分页
     *
     * @param historyStatementQueryRequest historyStatementQueryRequest
     * @return pageList
     */
    BasePageResponse<HistoryStatementQueryResponse> queryStatementsByPage(HistoryStatementQueryRequest historyStatementQueryRequest);

    /**
     * 合同及设备查询接口
     *
     * @param contractDevicesInfoQueryRequest contractDevicesInfoQueryRequest
     * @return deviceList
     */
    List<ContractDeviceInfoResponse> queryContractDevicesInfo(ContractDevicesInfoQueryRequest contractDevicesInfoQueryRequest);


    /**
     * 删除账单
     *
     * @param deleteStatementRequest deleteStatementRequest
     * @return DeleteStatementResponse
     */
    DeleteStatementResponse deleteStatement(DeleteStatementRequest deleteStatementRequest);


    /**
     * 是否可以创建账单校验接口
     *
     * @param createStatementValidationRequest createStatementValidationRequest
     * @return CreateStatementValidationResponse
     */
    CreateStatementValidationResponse validationCreateStatement(CreateStatementValidationRequest createStatementValidationRequest);

    /**
     * 账单预览;
     * 账单生成;
     * 合同生成;
     */
    CreateStatementResponse createStatement(CreateStatementRequest createStatementRequest);

    /**
     * 设备开始时间计算
     */
    CalculateStatementResponse calculateStatementDeviceStartTime(CalculateStatementRequest calculateStatementRequest);


    /**
     * 账单页面在途单据信息展示
     * 获取各类在途单据信息展示
     */
    InTransitDocumentInfoResponse getInTransitDocumentInfos(InTransitDocumentInfoRequest inTransitDocumentInfoRequest);

    /**
     * 账单合同签署后的回调
     */
    Boolean updateContractSignedInfos(FinancialContractUpdateApiRequest financialContractUpdateApiRequest);

    Boolean updateContractCreateInfos(FinancialContractUpdateApiRequest financialContractUpdateApiRequest);

}
